import numpy as np

# # 4.1 数组的转置
# # （1）向量的转置
# arr1 = np.arange(1,4) # 创建向量
# print(arr1)
# arr2 = arr1.reshape((1, -1)) # 升级为矩阵
# print(arr2)
# arr3 = arr2.T # 行矩阵的转置为列矩阵
# print(arr3)
# arr4 = arr3.T # 列矩阵的转置为行矩阵
# print(arr4)
# # （2）矩阵的转置
# matrix = np.arange(1, 10).reshape(3,3)
# print(matrix)
# matrix_T = matrix.T
# print(matrix_T)


# # 4.2 数组的翻转
# # （1）向量的翻转
# # 向量只能使用 np.flipud( ) 表示 up-down；
# # 在数学中，向量并不是横着排的，而是竖着排的。
# arr1 = np.arange(10)# 创建向量
# print( arr1 )
# arr_ud = np.flipud(arr1)# 翻转向量
# print(arr_ud)
# # （2）矩阵的翻转
# # 上下翻转 np.flipud( ) ，表示 up-down；
# # 左右翻转的 np.fliplr( )，表示 left-right。
# arr2=np.arange(1,21).reshape(4, 5)
# print(arr2)
# arr2_ud = np.flipud(arr2)
# print(arr2_ud)
# arr2_lr = np.fliplr(arr2)
# print(arr2_lr)

# # 4.3 数组的重塑
# # 想要重塑数组的形状，需要用到 .reshape( ) 方法。
# # 给定了其他维度的数值，剩下一个维度可以填-1，让它自己去计算。
# # （1）向量的变形
# print("向量的变形")
# arr1= np.arange(1,10)# 创建向量
# print(arr1)
# arr2 = arr1.reshape(3,3)# 变形为矩阵
# print(arr2)
# # （2）矩阵的变形
# print("矩阵的变形")
# arr3 = np.arange(1, 13).reshape(2,6)
# print(arr3)
# arr4 = arr3.reshape(3,4) # 普通的矩阵变形
# print(arr4)
# arr5 = arr3.reshape(12)# 变形为向量
# print(arr5)
# arr6 = arr3.reshape(1, 12) # 变形为一行矩阵 
# print(arr6)
# arr7 = arr3.reshape(12, 1) # 变形为1列矩阵
# print(arr7)


# # 4.4 数组的拼接
# # （1）向量的拼接
# # 两个向量拼接，将得到一个新的加长版向量。
# print("向量的拼接")
# matrix1 = np.array( [1,2,3] )# 创建向量 1
# print(matrix1)
# matrix2 = np.array( [4,5,6] )# 创建向量 2
# print(matrix2)
# arr3 = np.concatenate([matrix1, matrix2])# 拼接
# print(arr3)
# # （2）矩阵的拼接
# # 两个矩阵可以按不同的维度进行拼接，但拼接时必须注意维度的吻合。
# print("矩阵的拼接")
# matrix1 = np.array( [[1,2,3],[ 4,5,6]] )# 创建数组 1
# print(matrix1)
# matrix2 = np.array( [[7,8,9],[10,11,12]] )# 创建数组 2
# print(matrix2)
# matrix3 = np.array( [[100, 200],[300, 400]] )# 创建数组 3
# print(matrix3)
# # 按第一个 [0] 维度（行）拼接 默认参数 axis=0
# matrix4 = np.concatenate([matrix1, matrix2], axis= 0)
# print(matrix4)
# # 按第二个 [1] 维度（列）拼接
# matrix5 = np.concatenate([matrix1, matrix3], axis=1)
# print(matrix5)
# # 向量和矩阵不能进行拼接，必须先把向量升级为矩阵。


# 4.5 数组的分裂
# （1）向量的分裂
# 向量分裂，将得到若干个更短的向量。
print("向量的分裂")
arr = np.arange(10,100,10)# 创建向量
print(arr)
# 分裂数组
# np.split( )函数中，给出的第二个参数[3,7]表示在索引[3]和索引[7]的位置截断。
arr1, arr2, arr3 = np.split(arr, [3, 7])
print(arr1, arr2, arr3)
# （2）矩阵的分裂
# 矩阵的分裂同样可以按不同的维度进行，分裂出来的均为矩阵
print("矩阵的分裂")
# 创建矩阵
matrix = np.arange(1,37).reshape(6,6)
print("matrix", matrix)
# 按[0]维度（行）分裂
m1, m2, m3 = np.split(matrix, [3,5])
print("m1", m1)
print("m2", m2)
print("m3", m3)
# 按[1]维度（列）分裂
m4,m5,m6 = np.split(matrix, [2,4], axis=1)
print("m4", m4)
print("m5", m5)
print("m6", m6)
